//***************************************************************************
//*
//*	File:			dswl_documents.h
//*	Description:	Wrapper for IDocuments interface
//*
//***************************************************************************
//*
//*	Note:			This source code is provided "as is" meaning that you may 
//*					use it at your own risk. 
//*					You are free to use it in any way you like.
//*
//***************************************************************************
//*
//*	History:		
//*
//*	-------------------------------------------------------------------------
//*	2003/07/27	|	Initial release									|	rk
//*	-------------------------------------------------------------------------
//*
//***************************************************************************

//
//-------------------------------------------------------------- PREPROCESSOR 
//

#ifndef			_DSWL_DOCUMENTS_H_INCLUDED
#define			_DSWL_DOCUMENTS_H_INCLUDED

#if				_MSC_VER > 1000
#pragma once
#ifdef			__SWITCH_SHOW_HEADER
#pragma message ("-- dswl_documents.h\n")
#endif
#ifdef			__SWITCH_SHOW_HEADER_TREE
#pragma message ("-- "__FILE__"\n")
#endif
#endif 

#ifdef			_DSWL_SWITCH_USE_AUTOCAST
#ifdef			_DSWL_SWITCH_USE_UNSAFE_AUTOCAST
#pragma	message ( "-- dswl_documents.h \t Warning: Generating auto-cast operator: CIDocuments::operator IDocuments* () const" )
#else
#pragma	message ( "-- dswl_documents.h \t Warning: Generating auto-cast operator: CIDocuments::operator       IDocuments* ()" )
#pragma	message ( "-- dswl_documents.h \t Warning: Generating auto-cast operator: CIDocuments::operator const IDocuments* () const" )
#endif
#endif

//
//-------------------------------------------------------------- DEPENDENCIES
//

//
//------------------------------------------------------ FORWARD DECLARATIONS
//

class			CIApplication		;
class			CIGenericDocument	;

//
//--------------------------------------------------------- CLASS DECLARATION
//

//***************************************************************************
//**	@DOC		CLASS CIDocuments
//***************************************************************************
//*		@CLASS		Wrapper for IDocuments interface
//***************************************************************************
class _DSWL_EXT_CLASS CIDocuments  
{
	//																								
	//-----------------------------------------------------------------------						
	//***************************     ATTRIBS     ***************************						
	//-----------------------------------------------------------------------						
	//																								
private:																												// @ACCESS	Private Attributes	
			CComPtr< IDocuments >	m_pIDocuments	;																	// @CMEMBER	Smart pointer to the actual text document interface
																													
	//																																
	//-----------------------------------------------------------------------														
	//*************************     PROPERTIES     **************************								
	//-----------------------------------------------------------------------														
	//																																
public:																													// @ACCESS	Public Property Methods
			CIApplication			GetApplication		( void )											const	;	// @CMEMBER	Returns the application the documents belong to
			long					GetCount			( void )											const	;	// @CMEMBER	Returns the number of documents in the container

	//																															
	//-----------------------------------------------------------------------													
	//*************************     INFORMATION     *************************								
	//-----------------------------------------------------------------------													
	//																															
public:																													// @ACCESS	Public Information Methods
			BOOL					IsNull				( void )											const	;	// @CMEMBER	Determines whether the internal pointer is <t NULL>
			BOOL					IsValid				( void )											const	;	// @CMEMBER	Determines whether the internal pointer differs from <t NULL>
																											
	//																													
	//-----------------------------------------------------------------------											
	//*********************     ELEMENT MANAGEMENT     **********************
	//-----------------------------------------------------------------------											
	//																													
public:																													// @ACCESS	Public Project Management Methods
			CIGenericDocument		GetAt				(		long				a_lIndex			)	const	;	// @CMEMBER	Determines the item at specified 0-based index. 
			CIGenericDocument		GetItem				(		long				a_lItem				)	const	;	// @CMEMBER	Determines the item at specified 1-based index. 

			CIGenericDocument		Add					( const	CString&			a_strDocumentType	)			;	// @CMEMBER	Inserts a new document to the container
			CIGenericDocument		Open				( const	CString&			a_strFileName	
														, const	CString&			a_strOpenAs
														,		BOOL				a_bReadOnly			)			;	// @CMEMBER	Inserts an existing document to the container

			DsSaveStatus			SaveAll				(		BOOL				a_bPrompt			)			;	// @CMEMBER	Saves all documents
			DsSaveStatus			CloseAll			(		BOOL				a_bSaveChanges		)			;	// @CMEMBER	Closes all documents

	//																											
	//-----------------------------------------------------------------------									
	//*************************     EXTENSIONS     **************************
	//-----------------------------------------------------------------------									
	//																											
public:																													// @ACCESS	Public Extension Methods
			CIGenericDocument		FindByFullName		( const CString&			a_strFullName		)	const	;	// @CMEMBER	Finds a document by its full name

	//																											
	//-----------------------------------------------------------------------									
	//**************************     OPERATORS     **************************									
	//-----------------------------------------------------------------------									
	//																											
public:																													// @ACCESS	Public Operators
			bool					operator	==		( const CIDocuments&		a_Other				)	const	;	// @CMEMBER	Comparison operator
			bool					operator	!=		( const CIDocuments&		a_Other				)	const	;	// @CMEMBER	Comparison operator
			bool					operator	<=		( const CIDocuments&		a_Other				)	const	;	// @CMEMBER	Comparison operator
			bool					operator	>=		( const CIDocuments&		a_Other				)	const	;	// @CMEMBER	Comparison operator
			bool					operator	<		( const CIDocuments&		a_Other				)	const	;	// @CMEMBER	Comparison operator
			bool					operator	>		( const CIDocuments&		a_Other				)	const	;	// @CMEMBER	Comparison operator
																										
			CIDocuments&			operator	=		(		IDocuments*			a_pIOther			)			;	// @CMEMBER	Copy operator
																										
			IDocuments*				operator	*		( void )													;	// @CMEMBER	Dereference operator
	const	IDocuments*				operator	*		( void )											const	;	// @CMEMBER	Dereference operator
																											
			IDocuments*				operator	->		( void )													;	// @CMEMBER	Member access operator
	const	IDocuments*				operator	->		( void )											const	;	// @CMEMBER	Member access operator

			CIGenericDocument		operator	[]		(		int					a_iIndex			)	const	;	// @CMEMBER	Subscription operator
																										
	#ifdef	_DSWL_SWITCH_USE_AUTOCAST																	
	#ifdef	_DSWL_SWITCH_USE_UNSAFE_AUTOCAST															
									operator			IDocuments*	( void )								const	;	// @CMEMBER	TypeCast operator
	#else																									
									operator			IDocuments*	( void )										;	// @CMEMBER	TypeCast operator
									operator	const	IDocuments*	( void )								const	;	// @CMEMBER	TypeCast operator
	#endif																								
	#endif							
									
	//																								
	//-----------------------------------------------------------------------						
	//***********************     CON/DESTRUCTION     ***********************						
	//-----------------------------------------------------------------------						
	//																								
public:																													// @ACCESS	Public Con-/Destruction Methods	
			 CIDocuments( IDocuments* a_pIDocuments = NULL );															// @CMEMBER	Default constructor
	virtual ~CIDocuments();																								// @CMEMBER	Default destructor
};
//***************************************************************************
//**	@END
//***************************************************************************

#endif		// _DSWL_DOCUMENTS_H_INCLUDED
